import { createApp } from 'vue'
import { createPinia } from 'pinia'
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/reset.css';
import piniaPersistedstate from 'pinia-plugin-persistedstate'
import App from './App.vue'
import router from './router'
import '@/assets/neo-theme.css'

// 添加全局JSON解析拦截器，处理大整数精度问题
(function preserveBigIntIds() {
  // 识别可能包含大整数的ID字段
  const ID_FIELDS = ['id', 'appId', 'userId', 'createTime', 'updateTime'];
  
  // 保存原始的JSON方法
  const originalJSONParse = JSON.parse;
  const originalJSONStringify = JSON.stringify;
  
  // 重写JSON.parse方法
  JSON.parse = function(text, reviver) {
    // 如果已经提供了自定义的reviver函数，则合并我们的大整数处理逻辑
    const bigIntReviver = (key: string, value: any) => {
      // 检查是否是ID字段并且是数字
      if (ID_FIELDS.includes(key) && typeof value === 'number') {
        return String(value); // 将数字转为字符串以保持精度
      }
      // 应用原始的reviver函数（如果有）
      return reviver ? reviver(key, value) : value;
    };
    
    return originalJSONParse(text, bigIntReviver);
  };
  
  // 重写JSON.stringify方法，确保大整数ID作为字符串处理
  JSON.stringify = function(value: any, replacer?: any, space?: string | number) {
    // 如果没有提供replacer，创建一个处理大整数ID的replacer
    if (!replacer) {
      replacer = function(key: string, value: any) {
        // 如果是大整数ID字段，确保它是字符串类型
        if (ID_FIELDS.includes(key) && typeof value === 'number' && String(value).length > 15) {
          return String(value);
        }
        return value;
      };
    }
    
    return originalJSONStringify(value, replacer, space);
  };
  
  console.log('已启用大整数ID精度保护');
})();

const app = createApp(App)

// 创建并配置 pinia
const pinia = createPinia()
pinia.use(piniaPersistedstate)

// 应用插件
app.use(Antd)
app.use(pinia)  // 使用配置好的 pinia 实例，而不是创建新的
app.use(router)

app.mount('#app')
